/*! \class MainWindow
 *
 *  \brief Klasy bazowe graficznego interfejsu użytkownika wygenerowana przy pomocy wxFormBuilder
 *
 *  \date    06/2009
 */

#ifndef __ImageEditor__
#define __ImageEditor__

#include <wx/cshelp.h>
#include <wx/intl.h>

#include <wx/panel.h>
#include <wx/gdicmn.h>
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/string.h>
#include <wx/sizer.h>
#include <wx/bitmap.h>
#include <wx/image.h>
#include <wx/icon.h>
#include <wx/menu.h>
#include <wx/frame.h>
#include <wx/stattext.h>
#include <wx/spinctrl.h>
#include <wx/button.h>
#include <wx/statbox.h>
#include <wx/dialog.h>

//! Klasy bazowe graficznego interfejsu użytkownika
class MainWindow : public wxFrame 
{
private:

protected:
	enum
	{
		MAIN = 1000,
		MAIN_PANEL,
		MENU,
		OPEN,
		SAVE,
		EXIT,
		ABOVE,
		BELOW,
		MOVE,
		LROTATE,
		RROTATE,
		FLIPUD,
		FLIPLR,
		CROP,
		SUBSMPL
	};

	//!Obiekt okna na którym wyświetlana jest aktualna bitmapa
	wxPanel* main_panel_;

	//! Obiekty reprezentujący menu
	wxMenuBar* menu_;
	wxMenu* file_;
	wxMenu* layer_;
	wxMenu* object_;

	/*!
	* Virtualne funkcje obsługi zdarzeń nadpisane w klasie pochodnej ImageEditorMainWindow
	*
	* /param obiekty dziedziczące po głównej klasie zdarzeń wxEvent
	*/
	virtual void close( wxCloseEvent& event ){ event.Skip(); }
	virtual void quit( wxCommandEvent& event ){ event.Skip(); }
	virtual void resize( wxSizeEvent& event ){ event.Skip(); }
	virtual void paint( wxPaintEvent& event ){ event.Skip(); }
	virtual void open( wxCommandEvent& event ){ event.Skip(); }
	virtual void save( wxCommandEvent& event ){ event.Skip(); }
	virtual void save_as( wxCommandEvent& event ){ event.Skip(); }
	virtual void above_layer( wxCommandEvent& event ){ event.Skip(); }
	virtual void below_layer( wxCommandEvent& event ){ event.Skip(); }
	virtual void move( wxCommandEvent& event ){ event.Skip(); }
	virtual void undo( wxCommandEvent& event ){ event.Skip(); }
	virtual void redo( wxCommandEvent& event ){ event.Skip(); }
	virtual void rotate_left( wxCommandEvent& event ){ event.Skip(); }
	virtual void rotate_right( wxCommandEvent& event ){ event.Skip(); }
	virtual void flip_up_down( wxCommandEvent& event ){ event.Skip(); }
	virtual void flip_left_right( wxCommandEvent& event ){ event.Skip(); }
	virtual void crop( wxCommandEvent& event ){ event.Skip(); }
	virtual void subsampled( wxCommandEvent& event ){ event.Skip(); }


public:
	/*! 
	* Konstruktor 
	* Tworzy główne okno graficznego interfejsu użytkownika, podpina funkcje obsługi zdarzeń
	*/
	MainWindow( wxWindow* parent, wxWindowID id = MAIN, const wxString& title = _("Image Editor"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 800,600 ), long style = wxDEFAULT_FRAME_STYLE|wxMAXIMIZE|wxTAB_TRAVERSAL );
	
	//! Destruktor
	~MainWindow();
	
};

//! Klasa bazowa reprezentująca okno komendy przycinania
class CropWindow : public wxDialog 
{
private:

protected:
	enum
	{
		CROP = 2000,
		CROP_SIZER,
		ID_X,
		ID_Y,
		ID_WIDTH,
		ID_HEIGHT
	};

	wxStaticText* staticText1;
	wxStaticText* staticText2;
	wxSpinCtrl* x_;
	wxStaticText* staticText3;
	wxSpinCtrl* y_;
	wxStaticText* staticText4;
	wxSpinCtrl* width_;
	wxStaticText* staticText5;
	wxSpinCtrl* height_;
	wxButton* apply_;
	wxButton* cancel_;

public:
	CropWindow( wxWindow* parent, wxWindowID id = CROP, const wxString& title = _("Crop"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 210, 210 ), long style = 0, const wxString& name = wxT("crop_") );
	~CropWindow();
};

//! Klasa bazowa reprezentująca okno komendy podpróbkowywania widoku
class SubsmplWindow : public wxDialog {
protected:
	enum {
		SUBSMPL = 3000
	};

	wxStaticText* staticText2;
	wxSpinCtrl* x_step_;
	wxStaticText* staticText3;
	wxSpinCtrl* y_step_;
	wxButton* apply_;
	wxButton* cancel_;

public:
	SubsmplWindow( wxWindow* parent, wxWindowID id = SUBSMPL, const wxString& title = _("Sumsample image"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 210, 210 ), long style = 0, const wxString& name = wxT("subsample_") );
	~SubsmplWindow();
};

//! Klasa bazowa reprezentująca okno komendy przesówania obrazka
class MoveWindow : public wxDialog {
protected:
	enum {
		MOVE = 3000
	};

	wxStaticText* staticText2;
	wxSpinCtrl* x_offset_;
	wxStaticText* staticText3;
	wxSpinCtrl* y_offset_;
	wxButton* apply_;
	wxButton* cancel_;

public:
	MoveWindow( wxWindow* parent, wxWindowID id = MOVE, const wxString& title = _("Move image"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 210, 210 ), long style = 0, const wxString& name = wxT("move_") );
	~MoveWindow();
};

#endif //__ImageEditor__
